Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.12.2013, 22:44
Интересующийся
Отправить личное сообщение для AkidSe Посмотреть профиль Найти все сообщения от AkidSe
 
Регистрация: 10.12.2013
Сообщений: 19

Comet-запрос не дружит с простый AJAX
Всем привет. Недавно начал осваивать Comet-технологии. Но поняв что ни инфы, ни норм примеров данной технологии почти нет, я решил остановиться на простой ajax-php имитации. Все бы ничего, так эта имитация не дружит с простыми ajax-запросами. Когда я делаю long-polling запрос, а после этого простой ajax-запрос, то второй вообще не запускается. Сколько не думал, так и не надумал, аж руки опустились. Поэтому обратился на этот форум за помощью. Знатоки JS, буду вам очень благодарен за помощь.
Вот long-polling запрос(скорее весь код):
function Messanger() {
    this.last = 0;
    this.timeout = 360;
    this.comet = 0;
    var self = this;
    this.putMail = function(mail) {
        if(mail!=0){
        $("#mail").text(mail);
        $('#mail').css('opacity','1');
        var audio = $("#newcounttopmenu")[0];
         audio.play();
         $('#allCount').css('opacity','1');
        }else{
        $("#mail").text(mail);
        $('#mail').css('opacity','0');
        }
    }
    this.parseData = function(message) {
        // простая обработка данных полученных с сервера, разбиваем строки и выполняет функции
        var items = message.split(';');
        if (items.length<1) return false;
        for (var i=0;i<items.length;i++) {
            eval(items[i]);
        }
        setTimeout(self.connection,1000);
    }
    this.connection = function() {
    		var mail=$("#mail").html();
	var jurnal=$("#jurnal").html();
	var lenta=$("#lenta").html();
	var zakl=$("#zakl").html();
        // здесь открывается соединение с сервером
        self.comet = $.ajax({
                type: "POST",
                url:  "/sys/ajax/topmenu.php",
                async: true,
                data: {
                	mail:mail,
                	jurnal:jurnal,
                	lenta:lenta,
                	zakl:zakl,
                	},
                dataType: "text",
                timeout: self.timeout*1000,
                success: self.parseData,
                error: function(){
                    // something wrong. but setInterval will set up connection automatically
                    setTimeout(self.connection,1000);
               }
            });
    }
    this.init = function() {
        //setInterval(self.connection,self.timeout*1000);
        self.connection();
    }
    this.init();
}

$(document).ready(function(){
    // инициализация
    var msg = new Messanger();
});

Ну а как построены простые ajax-запросы, я думаю, вы знаете.

Последний раз редактировалось AkidSe, 10.12.2013 в 22:58.
Ответить с цитированием
  #2 (permalink)  
Старый 13.12.2013, 20:16
Интересующийся
Отправить личное сообщение для AkidSe Посмотреть профиль Найти все сообщения от AkidSe
 
Регистрация: 10.12.2013
Сообщений: 19

Все сам решил. Перед новым ajax - запросом просто закрываю все другие:
$.xhrPool = [];
$.xhrPool.abortAll = function() {
    $(this).each(function(idx, jqXHR) {
        jqXHR.abort();
    });
    $.xhrPool.length = 0
};

$.ajaxSetup({
    beforeSend: function(jqXHR) {
        $.xhrPool.push(jqXHR);
    },
    complete: function(jqXHR) {
        var index = $.xhrPool.indexOf(jqXHR);
        if (index > -1) {
            $.xhrPool.splice(index, 1);
        }
    }
});

//потом вызываю так функцию
$.xhrPool.abortAll();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05
Ajax запрос на ютуб masterdle Элементы интерфейса 2 16.07.2013 15:32
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 13.11.2012 00:13
Как можно кешировать Ajax запрос ? saturn AJAX и COMET 5 27.10.2012 14:48
ajax запрос с подгружемным js HelpeR AJAX и COMET 1 27.10.2008 12:44